package Guigu3.Interface;
/*
 * 接口的使用
 * 1、接口使用interface来定义
 * 2、JAVA中，接口和类是并列的两个结构
 * 3、如何定义接口，定义接口中的成员
 * 
 *      3.1、JDK7及以前：只能定义全局常量和抽象方法
 *           >全局常量：public static final的，但是书写时，可以省略不写
 *           >抽象方法：public abstract的，但是书写时，可以省略不写
 *           
 *      3.2、JDK8以后:除了定义全局常量和抽象方法之外，还可以定义静态方法，默认方法
 *      
 * 4、接口中不能定义构造器，意味着接口不可以实例化
 * 
 * 5、JAVA中，接口通过让类去实现（implements）的方式来使用。
 *    如果实现类覆盖了接口中的所有抽象方法，则此实现类可以实例化
 *    如果实现类没有覆盖接口中所有的抽象方法，则此实现类仍为一个抽象类
 * 
 * 6、JAVA类可以实现多个接口---->弥补了Java单继承性的局限性
 *    格式：class AA extends BB implements CC,DD,EE
 *    
 * 7、接口与接口之间可以继承，而且可以多继承
 * 
 * ***************************************
 * 8、接口的具体使用，体现多态性
 * 9、接口，实际上可以看做是一种规范
 * 
 * 10、面试题：抽象类与接口的有什么异同
 */
public class InterfaceTest {

	public static void main(String[] args) {
		
		System.out.println(Fyable.MAX_SPEED);

		Plane plane = new Plane();
		plane.fly();
	}

}

//接口
interface Fyable
{
	public static final int MAX_SPEED = 7900;//第一宇宙速度
	int MIN_SPEED = 1;//省略了public static final
	
	public abstract void fly();
	
	void stop();//省略了public abstract 
	
//	public Fyable()
//	{
//		//Interfaces cannot have constructors
//	}
}

//接口
interface Attackable
{
	void attack();
}

class Plane implements Fyable
{

	@Override
	public void fly() {
		System.out.println("飞机通过引擎起飞");
	}

	@Override
	public void stop() {
		System.out.println("飞行员减速停止");
	}
}

abstract class Kite implements Fyable
{

	@Override
	public void fly() {
		// TODO Auto-generated method stub
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
	}
}

class Bullet extends Object implements Fyable,Attackable,CC//可以继承，可以实现多个接口
{

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mehtod2() {
		// TODO Auto-generated method stub
		
	}
	
}
//*********************
interface AA 
{
	void method1();
}
interface BB
{
	void mehtod2();
}

interface CC extends AA,BB
{
	
}